import { constantRoutes, asyncRoutes, errorRoutes } from "@/router";

// 权限存 vuex

const state = {
	//最终结果 渲染左侧菜单用
	routes: [],
	addRoutes: [],
    isGetUserInfo:false,//是否获取用户信息 判断token是否正确
};

// 计算单个路由是否有权限
const hasPermission=(route,role)=>{
    // 如果当前路由 有roles字段
   if(route.meta?.roles){
         return route.meta.roles.includes(role)
   }else{
    return true
   }
}
//计算动态路由权限函数
const filterAsyncRoutes=(routes,role)=>{
    let temp=[]
    routes.forEach(route=>{
        // 第一层
        if(hasPermission(route,role)){
        //    如果有儿子 儿子也需要计算
        if(route.children?.length){
          route.children=filterAsyncRoutes(route.children,role)
        }
            temp.push(route)
        }
    })
    return temp
}
// console.log(filterAsyncRoutes(asyncRoutes,'super'))


const mutations = {
ADD_ROUTES(state,data){
    // 把静态路由和计算好的动态路由合并给左侧菜单使用
    state.routes=[...constantRoutes,...data]
},
// 设置用户信息状态
SET_USERINFO_STATE(state,flag){
    state.isGetUserInfo=flag
}
};  
const actions = {
    // 生成动态路由函数
    generateRoutes({commit},role){
    return new Promise(resolve=>{
    // 筛选出可使用的动态路由
    let accessRoutes=filterAsyncRoutes(asyncRoutes,role)
    commit('ADD_ROUTES',accessRoutes)
    // 把筛选好的动态路由和错误路由抛出去给addRoutes使用
    resolve([...accessRoutes,...errorRoutes])
    })
    }
};

export default {
	//命名空间
	namespaced: true,
	state,
	mutations,
	actions,
};
